home *** CD-ROM | disk | FTP | other *** search
/ Aminet 45 / Aminet 45 (2001)(GTI - Schatztruhe)[!][Oct 2001].iso / Aminet / game / role / ldmud-3.2-bin.lha / mud / HISTORY < prev    next >
Text File  |  2001-08-08  |  46KB  |  860 lines

  1. This file lists all changes to the game driver which have a visible
  2. impact on its behaviour both towards the mudlib as well as towards
  3. the host system.
  4.  
  5. For a detailed list of all changes see the file CHANGELOG.
  6.  
  7. 06-Aug-2001 (Lars Duening) -- upcoming Release 3.2.9
  8.  
  9.     - Changed efuns:
  10.        + add_action(): New flag AA_IMM_ARGS implements the sane NOSPACE
  11.            handling.
  12.        + allocate(): Accepts an optional initialisation value and can
  13.            create multi-dimensional arrays.
  14.        + ceil(), floor(): Also accept integer argument values.
  15.        + clones(): If the driver is compiled with DYNAMIC_COSTS, the cost
  16.            is proportional to the number of objects in the game.
  17.        + ctime(): Accepts the output of new efun utime() as well.
  18.        + debug_info(): New argument DINFO_TRACE to return the current
  19.             or the last error call stack.
  20.             Argument (DINFO_DATA, DID_MEMORY) also returns the number
  21.             and size of permanent and clib allocations (where
  22.             applicable).
  23.             Argument (DINFO_DATA, DID_STATUS) also returns
  24.             the total number of heartbeat calls.
  25.             Single values of (DINFO_DATA) can be returned instead of the
  26.             whole array.
  27.        + debug_message(): New second argument determines where to
  28.             log the message, and if to prepend a timestamp.
  29.        + exec(): If this_interactive() points to one of the involved
  30.             objects, it is switched over as well, like this_player().
  31.        + filter(), map(), sort_array(), walk_mapping(): Protected lvalues
  32.             (e.g. &(i[0])) are not allowed as callback parameters.
  33.        + lambda(): Simul efuns with extended varargs weren't compiled
  34.             correctly.
  35.        + load_name(), object_name(), program_name(): 0 is now accepted
  36.             as argument, the efuns returns 0 in that case.
  37.        + object_info(): OINFO_MEMORY also returns the program flags
  38.            NO_INHERIT, NO_SHADOW and NO_CLONE, and gives a better account
  39.            of the memory used for strings and variables.
  40.            Single values can be returned instead of the whole array.
  41.        + printf(), sprintf(): A leading zero in the field size will now print
  42.            only leading zeros and not interfere with the pad string option.
  43.        + printf(), sprintf(): If an explicite pad string is defined, even
  44.            if it is space, the efuns won't remove white space before a line
  45.            end.
  46.        + printf(), sprintf(): Printing numbers with leading zeroes and a
  47.            sign character printed the sign in the wrong place.
  48.        + query_udp_port(), send_udp(): Renamed from query_imp_port() and
  49.            send_imp().
  50.        + regexp functions: more compatible with 8-bit characters.
  51.        + regexp functions: New metacharacters '+' allows to specifiy 'at
  52.            least one match'.
  53.        + regreplace(): Accepts a closure to produce the replacement string
  54.            instead of just a constant string.
  55.        + regreplace(): Pattern which could match on the
  56.            empty string matched once too often at string end.
  57.        + sin(), cos(), tan(), atan(), atan2(), log(), exp(), sqrt(), pow():
  58.            Integers are accepted as arguments, too.
  59.        + sizeof(): Now also returns the length of strings.
  60.        + terminal_colour(): Colour keys can now be mapped using a closure.
  61.        + add_verb(), add_xverb(), efun308(), file_name(), map_array(),
  62.          filter_array(), filter_mapping(), map_mapping(), m_sizeof(),
  63.          send_imp():
  64.            Available only if driver is compiled with support for
  65.            deprecated efuns.
  66.  
  67.     - Corrected efuns:
  68.        + call_out(): In release 3.2.8 lvalues were not allowed as arguments -
  69.            now they are again.
  70.        + call_resolved(): Now accepts a destructed object as second parameter
  71.            as it should.
  72.        + functionlist(): The filter flags didn't really work.
  73.        + input_to(): The option IGNORE_BANG didn't work. In charmode, !-escapes
  74.            after the first received data are now recognized. 
  75.        + map() and other efuns taking callbacks arguments: The pattern
  76.            'function, object, extra' was parsed such that 'object' became
  77.            part of the 'extra' arguments.
  78.        + object_info(): The returned OIB_NAME now starts with a '/' in plain
  79.            mode.
  80.        + printf(), sprintf(): The formatter "%^" will print "%^", for
  81.            compatibility with terminal_colour().
  82.        + printf(), sprintf(): Column-formatting a string with one
  83.            newline printed one newline too few if the formatstring didn't
  84.            end immediately.
  85.        + sscanf(): the format '%s%d' failed to parse 'ab1cd' correctly.
  86.  
  87.     - New efuns:
  88.        + db_affected_rows(), db_conv_string(), db_close(), db_connect(),
  89.          db_exec(), db_fetch(), db_handles(), db_coldefs(), db_insert_id(),
  90.          db_error():
  91.            Optional: mySQL support.
  92.        + gmtime(), localtime(): Return the time broken up into its
  93.            constituents.
  94.        + md5_encrypt(): Compute the MD5 message digest for a string.
  95.        + min(), max(): To select the minimum resp. maximum among a bunch
  96.            of numbers or strings.
  97.        + sgn(): Return the sign of a numeric argument.
  98.        + utime(): Return the current time in microsecond resolution.
  99.  
  100.     - Master Object:
  101.        + receive_udp(): Renamed from receive_imp().
  102.        + privilege_violation(): Privilege "send_udp" replaced "send_imp".
  103.        + valid_trace(): New second argument to receives the argument
  104.            passed to the efun.
  105.        + runtime_error(): Receives an extra argument to distinguish between
  106.            normal runtime errors, and those occuring during a heartbeat.
  107.        + include_file(), H_INCLUDE_DIRS: The pathnames can now start
  108.            with leading slashes.
  109.        + If a master is forced to reload via SIGUSR1, all inherited objects
  110.            (if any) are reloaded as well.
  111.        + Bugfix: slow_shut_down() was not called with previous_object(),
  112.            this_player() and this_interactive() being 0.
  113.        + Bugfix: When reactivating a destructed master, the lfuns
  114.            inaugurate_master() and reactivate_destructed_master() are found
  115.            even when static.
  116.  
  117.     - Fixed Crashers:
  118.        + Catching errors with catch() did not work reliably when the
  119.            driver was compiled with gcc.
  120.        + Unlucky combinations of heart_beat() definitions or declarations
  121.            (e.g. private and public inheritance in this order) crashed
  122.            the driver when the heart_beat() was called.
  123.        + When creating long value save strings, the driver crashed on
  124.            corrupted memory.
  125.        + If the object for a prompt-closure is destructed, the driver
  126.            could crash under extremely unlucky circumstances.
  127.        + #define'ing the name of an inline closure was not detected.
  128.        + Assignments of computed strings sometimes crashed the driver.
  129.        + Pre-increment or -decrement on an undefined variable, where
  130.            the result was used in a typechecked context.
  131.  
  132.     - Language:
  133.        + New operators '>>>' and '>>>=' for logical right shifts.
  134.        + New LPC define __LDMUD__ to identify this driver branch.
  135.        + New LPC defines __VERSION_MAJOR__, __VERSION_MINOR__,
  136.          __VERSION_MICRO__, __VERSION_PATCH__ expand to the various parts
  137.          of the driver version.
  138.        + New LPC define __WIZLIST__ specifies from where the driver read the
  139.            initial wizlist information.
  140.        + Numbers can also be specified as binary patterns with the '0b'
  141.            prefix, and as octals with the '0o' prefix.
  142.        + Floating point numbers can now also be specified in the
  143.            exponential notation, e.g. '3.14E-5'.
  144.        + Character escape sequences can now specify the character code
  145.            directly in decimal ('\[1-9]...'), octal ('\0o...'), sedecimal
  146.            ('\x...' and '\0x...') and binary ('\0b...').
  147.        + The operators '++' and '--' can now be used on floats, too.
  148.        + Closures bound to destructed objects are now treated uniformly
  149.            like destructed objects and are replaced by 0s where required.
  150.        + Lfun and variable closures can now be compared with '==' and '!=',
  151.            and are treated correctly in alist and array operations.
  152.        + Inline closures inherit the visibility of their defining function.
  153.        + Experimental: Extended the construct catch() with the keyword
  154.            'nolog', which suppresses logging the caught error in the logfiles.
  155.            It is meant for objects like wizard tools.
  156.        + It is no longer possible to prematurely end an inline closure
  157.            function by inserting a free '}'.
  158.        + Global functions are no longer hidden by local variables.
  159.        + It is now possible to cast to '(mixed)'.
  160.        + If operands of different types are given to '?:', the result
  161.            will have the type 'mixed'.
  162.        + Integers and floats can now be compared against each other.
  163.        + Identifier names can use the extended alpha characters from the
  164.            ISO 8859-1 alphabet.
  165.        + Experimental: The 'default' statement allows to set a default
  166.            visibility for variables and functions. It is meant to make
  167.            the re-engineering of existing code easier.
  168.        + Bugfix: Adding mappings of different width throws an error, unless
  169.            one of the mappings if empty.
  170.        + Bugfix: Right shift by 32 or more bits was computed incorrectly.
  171.        + Bugfix: The type tracking of multiplications can returns the right
  172.            type when seeing 'mixed' operands.
  173.        + Bugfix: All <op>= assignment can now operate on indexed strings
  174.            on the left hand side.
  175.        + Bugfix: Additions of floats to 0 yielded the wrong type.
  176.        + Bugfix: For closely consecutive switch case ranges (e.g. 'case
  177.            -2..-1: case 1..2:') the compiler generated faulty lookup
  178.            tables.
  179.        + Bugfix: Improved the typetracking for operator '&' when used with
  180.            mixed variables.
  181.        + Bugfix: A cast of an expression to its own type now longer inserts
  182.            a conversion operation.
  183.        + Bugfix: Global variables can no longer be redefined in the same
  184.            scope.
  185.        + Bugfix: It is now possible to use symbols in inline closures, ie.
  186.            "(: 'a :)".
  187.        + Bugfix: Escaped character constants are now only parsed up to a
  188.            maximum length. If no valid digits are found, the whole item
  189.            is simply treated as escaped character.
  190.  
  191.     - Runtime:
  192.        + New runtime limit LIMIT_CALLOUTS (commandline option
  193.            '--max-callouts') for the maximum number of callouts at one time.
  194.        + Attempts to set a single string character to 0 now raise
  195.            a runtime error.
  196.        + The internal alarm timing is monitored and restarted in case the
  197.            alarm gets lost (happens often on Cygwin).
  198.        + Normal runtime errors are no longer reported on the console.
  199.        + New optional driver hook H_SEND_NOTIFY_FAIL to send a notify fail
  200.            message to the proper receiver.
  201.        + For the first 255 simul efuns, it is now permissible to catch
  202.            reference parameters in a varargs parameter. However, the only
  203.            permitted use is to pass them flat in a function call (using
  204.            apply())!
  205.        + Bugfix: IPv6 name lookup works again, and also with both xerq and erq.
  206.        + Bugfix: The driver now longer gets a confused when a client like
  207.            TinyFugue refuses to use CHARMODE.
  208.        + Bugfix: On mapping addition or element assignment, invalid keys (like
  209.            destructed objects) were still counted against the allowed mapping
  210.            size.
  211.        + Bugfix: Simple reference loops as created by
  212.            'b = 0 || &a; b = 0 || &a;' are detected.
  213.        + Bugfix: When destructing an object, references through closures
  214.            are removed from the local variables as well.
  215.        + Bugfix: Removing or destructing a shadow now properly
  216.            removes all associated actions.
  217.  
  218.     - Other Changes:
  219.        + New driver option '--pidfile <filename>' to write the pid of the
  220.           driver process into a file.
  221.        + New driver option '--erq <filename>' to choose a different name
  222.           for the ERQ executable (default is 'erq'). The option can also
  223.           be used to specify the full pathname of the executable.
  224.        + The driver mode (plain or compat) can be selected with a commandline
  225.            option ('--no-compat' resp. '--compat').
  226.        + New driver options '--min-malloced' and '--min-small-malloced' to
  227.            specify the size of the initial block allocations.
  228.        + New driver options '--wizlist-file <filename>' and
  229.            '--no-wizlist-file' to control from where the driver reads the
  230.            initial wizlist information.
  231.        + New driver option '--args <filename>' reads the commandline
  232.            arguments from a textfile. These argument files can be nested.
  233.        + Removed a couple of fatal race-conditions in the xerq.
  234.        + New configuration option 'use-deprecated' allows
  235.            to disable obsolete and deprecated efuns. If enabled, the macro
  236.            __DEPRECATED__ is defined.
  237.        + The UDP port is now a standard feature. The option has been renamed
  238.            from 'catch_udp_port' to just 'udp_port'.
  239.        + Swapping is now a standard feature, though it still can be
  240.            disabled by specifying swapping times of 0.
  241.        + The ERQ_EXECUTE command now recognizes quoted arguments.
  242.        + The special command "malloc" is now under the control of the
  243.            IS_WIZARD flag, too.
  244.  
  245.  
  246. 20-Aug-2000 (Lars Duening) -- Release 3.2.8
  247.  
  248.     - Changed efuns:
  249.        + add_action(): Implemented the 'abbreviated verb' feature associated
  250.            with negative flag values.
  251.        + apply(): Just returns the first argument if it is not a closure.
  252.        + clonep(): Accepts arguments of all types.
  253.        + command_stack(): Also returns which objects did the notify_fail()s.
  254.        + debug_info(): DINFO_MEMORY also prints the datasize of an object.
  255.        + debug_info(): New request DINFO_DATA.
  256.        + debug_info(): DINFO_MALLOC also returns the size of the wasted
  257.            memory (where available).
  258.        + inherit_list(): in non-COMPAT mode, the returned program names
  259.            start with a '/'.
  260.        + input_to(): input_to()s can now be stacked, and also accept
  261.            closures for the function (this is not yet a real stacked
  262.            input handling, though).
  263.        + load_name(): also accepts strings as object designators.
  264.        + map(): can now map an array through a mapping.
  265.        + object_info(): OINFO_MEMORY also returns the datasize of an object.
  266.        + present(): present(object) returns the object found, not its
  267.             environment.
  268.        + printf(): prints to NPCs are sent to catch_tell().
  269.        + (s)printf(): object names printed in plain mode with %O now
  270.             start with a leading "/".
  271.        + (s)printf(): fields are now always padded to their full size,
  272.             even if no more data is following in the format string.
  273.        + query_notify_fail(): A flag allows to query which object set
  274.            the current error message.
  275.        + restore_object(): Preliminary: optionally restore the object
  276.            variables from a string.
  277.        + save_object(): Preliminary: optionally return the saved object
  278.            variables in a string.
  279.        + set_connection_charset(): Now also accepts a string as charset
  280.            specificator.
  281.        + sort_array(): Now accepts extra arguments to pass to the sorting
  282.            function.
  283.        + terminal_colour(): Straightened the key recognition, and added
  284.            a wrapping-only mode.
  285.        + to_string(): Now also accepts lambda closures and returns a string
  286.            suitable for debugging purposes.
  287.  
  288.     - Corrected efuns:
  289.        + get_type_info(): The object a lambda closure is bound to is now
  290.            returned properly.
  291.        + limited(): When calling closures with limited eval ticks, the
  292.            efun didn't make the full amount of ticks available.
  293.        + terminal_colour(): When removing spaces due to wrapping, the
  294.            efun sometimes falsely reported a "partial string too long".
  295.        + random(): distributes the random numbers more evenly, especially
  296.            over small ranges.
  297.        + regexp(), regexplode(), regreplace(): Errors in the regular
  298.            expression are raised as normal errors, and no longer printed
  299.            to the user.
  300.        + sprintf(): Is now reentrant.
  301.        + strstr(): When given negative starting offsets, the efun no
  302.            longer returns negative results.
  303.        + transpose_array(): Can now handle variable sized sub-arrays.
  304.        + typeof(): Now accepts literal references.
  305.        + unique_array(): When applied on an empty array, it no longer
  306.            raises an assertion.
  307.  
  308.     - New efuns:
  309.        + clones(): find and return the clones of an object.
  310.        + copy_file(): copies a file.
  311.        + save_value(): encodes a value into a string.
  312.        + restore_value(): decodes a value from a string generated by
  313.            save_value().
  314.        + set_combine_charset(): Define characters to combine into strings
  315.            when received in charmode.
  316.  
  317.     - Master Object:
  318.        + valid_read(), valid_write(): new function code "copy_file" to cater
  319.            for the new efun.
  320.        + valid_write(): the old function code "do_rename" (used twice) was
  321.            replaced by "rename_from" and "rename_to".
  322.        + log_error(): New argument "warn" determines if the message
  323.            passed to the lfun is an error or just a warning.
  324.        + New include_file(): generates the full pathname of a filename
  325.            given in an #include directive.
  326.        + New inherit_file(): generates the full pathname of a filename
  327.            given in an inherit directive.
  328.  
  329.     - Fixed Crashers:
  330.        + Unaligned pointer access in efun functionlist(), caused
  331.          by unaligned function stand-ins.
  332.        + Multiplication of an array of allocated strings with an integer.
  333.        + Replacing a prompt-closure from within the closure.
  334.        + Comparison "#'f == other_type" (also !=).
  335.        + It is no longer possible to pass destructed objects to
  336.            input_to() handlers.
  337.        + When apply() was called with an array as last argument, it didn't
  338.            check the array elements for destructed objects.
  339.        + When creating lambda closures with more than 254 constants, the
  340.            compiler stored the number of values at the wrong place,
  341.            clobbering one of the constants.
  342.        + Evalstack overflows caused by intermediate results went
  343.            unnoticed.
  344.        + Calling functions with more than 255 arguments triggered
  345.            a sanity check.
  346.        + Replacing a notify-fail closure while it is executed.
  347.        + The default handling of telnet negotiations (answering DONT/WONT)
  348.            for unsupported options like NAWS if no hooks are specified,
  349.            leaked LPC stack entries, eventually overwriting memory.
  350.        + The lambda block ({ #'return }) was compiled incorrectly,
  351.            causing a 'Bad stack at F_RETURN' at the end of the lambda
  352.            closure latest.
  353.        + Efun write_file() running out of fds outside of a compilation
  354.            no longer tries to raise a compilation error.
  355.        + A failing include statement at the end of the internal lex buffer
  356.            no longer causes the driver to lex invalid data, sometimes
  357.            crashing while doing so.
  358.  
  359.     - Language:
  360.        + The preincrement/-decrement operators can now be applied
  361.            to wide mappings ('++m[x,y]').
  362.        + If an object is inherited virtually multiple times,
  363.            a wildcarded super call ("*::") calls it only once.
  364.        + The ->() operator also accepts the following forms:
  365.            + x->y()    where y is the name of a local variable
  366.            + x->"y"()  where "y" is a constant string
  367.            + x->(y)()  where y is an expression returning a string.
  368.        + New loop-construct: foreach().
  369.        + call_others (ie. ->()) can be applied on arrays of objects, the
  370.            single call results are collected in one result array.
  371.        + <int> += <type> now works for <type> being string and float as well.
  372.        + The operator "&" (and "&=") can now be used to intersect strings.
  373.        + The operator "-" (and "-=") can now be used to remove characters
  374.            from a string.
  375.        + <mapping1> -= <mapping2>  now works for <mapping2> of any width,
  376.            like the normal subtraction already does.
  377.        + Indexing [..x] and [..<x] are allowed as short form of [0..x]
  378.            and [0..<x].
  379.        + When enabled, the modifier 'nosave' replaces the modifier 'static'
  380.            for variables - the latter is still recognized, but its use
  381.            is deprecated. Similar, 'nosave' should be used instead
  382.            of 'static' as inheritance modifier.
  383.        + New pragma "weak_types" to turn off type checking.
  384.        + New pragmas "pedantic" and "sloppy" turn on resp. off the
  385.            treatment of certain warnings as errors.
  386.        + Inherited functions are looked up using a breadth search.
  387.        + Local variables can be initialized in their definition, for example:
  388.              int i = 3;
  389.              int j = 3*i, k;
  390.        + New preprocessor macros __DIR__ and __PATH__() to retrieve the
  391.            path of the currently compiled file.
  392.        + '(void)' is now accepted as empty function argument list.
  393.        + Failure to pass enough arguments to a non-vararg simul_efun
  394.            generates a warning (error in pedantic mode).
  395.        + Redefinition of a function now checks the types of the arguments and
  396.            of the return type for consistency. Same for the
  397.            consistency between a function and a preceeding prototype. If a
  398.            difference is detected, a warning (error in pedantic mode for
  399.            arguments) is issued.
  400.        + Preprocessor statements #else and #endif no longer accept uncommented
  401.            text after the keyword. In pedantic mode, an error is raised,
  402.            otherwise a warning is generated.
  403.        + Preprocessor statement #define requires a definition after the
  404.            keyword.
  405.        + Bugfix: Newlines in literal strings in inline closures are now
  406.            rejected.
  407.        + Bugfix: #'parse_command wasn't implemented.
  408.        + Bugfix: The expressions &(expr4[x]) and &(expr4[<x]) could
  409.            generate invalid code (causing a "(lvalue) Indexing on illegal
  410.            type" error) in extreme circumstances.
  411.        + Bugfix: Compiler typechecks for "int * string" yielded "int"
  412.            instead of "string" (the generated code was correct).
  413.        + Bugfix: objects with "nomask" functions can be inherited virtually
  414.            multiple times.
  415.        + Bugfix: "*"::foo() failed if the last inherited object checked did
  416.            not contain the function - even if it has been found in other
  417.            objects.
  418.        + Bugfix: ::foo() didn't find the topmost definition when
  419.            confronted with virtual inherits.
  420.        + Bugfix: In the expression '++<ident>' the opcode for '++' was
  421.            overwritten if the <ident> required a 2-Byte index internally.
  422.            Same for '--'.
  423.        + Bugfix: The preprocessor properly ignores a '//'-comment in
  424.            the argument list for a function macro.
  425.  
  426.     - Runtime:
  427.        + If the driver is compiled for IPv6 support, the macro '__IPV6__'
  428.            is defined in LPC compiles.
  429.        + Simul-efuns can now take "varargs" arguments, like
  430.            in "foo(varargs mixed arg)".
  431.        + A simul-efun "call_other()" finally catches ->() calls as well.
  432.        + New pragma "no_shadow" to disallow shadows on a program.
  433.  
  434.     - Other Changes:
  435.        + The standard erq now supports the socket requests (actually it
  436.            does so for some time now, it just hasn't been published).
  437.        + Where supported, the erq supports lookup of IPv6 addresses.
  438.        + When compiled with DEBUG and CHECK_STRINGS, the commandline option
  439.            "--check-strings" checks the consistency of the shared string
  440.            table with every backend cycle.
  441.        + When compiled with DEBUG, the commandline option "--check-state"
  442.            controls the simplistic state checks of the virtual machine
  443.            in the backend loop.
  444.        + The driver can be compiled with bison as well as with byacc.
  445.        + New editor command 'M' to strip ^Ms from lineends.
  446.        + The commandline argument "--max-small-malloc" and the corresponding
  447.            configuration parameter are gone.
  448.  
  449.  
  450. 19-Aug-1999 (Lars Duening) -- Release 3.2.7
  451.  
  452.     - Changed efuns:
  453.         + command():
  454.             + native-mode restriction to the current object
  455.               is gone since there is no native mode anymore.
  456.             + commands are now stacked, meaning that after a
  457.               command finishes, the previous this_player(), verb, etc,
  458.               are restored.
  459.         + debug_info():
  460.             +  debug_info(DINFO_STATUS): now returns the status information
  461.                instead of printing it. debug_info(DINFO_STATUS, "malloc")
  462.                returns the malloc information usually connected with the
  463.                'malloc' command.
  464.             +  debug_info(DINFO_DUMP): allows to dump object information
  465.                and (if compiled) opcode usage information into a file.
  466.         + destruct(): accepts an already destructed object as argument.
  467.         + get_type_info(): returns for strings whether they are shared
  468.             or not.
  469.         + inherit_list(), debug_info(), object_info(): duplicate virtual
  470.             inherits are no longer listed.
  471.         + notify_fail(): calls to notify_fail() only affect the current
  472.             command. Also, NPCs can see 'their' notify_fail messages.
  473.         + object_info(): OINFO_BASIC result 'OIB_APPROVED' is gone.
  474.         + replace_program(): no longer flags objects as 'clones', but
  475.             instead uses the new flag 'O_REPLACED'.
  476.         + set_light(): is optional (though by default active)
  477.         + sprintf(), printf(): if an error occurs, the filename and line
  478.             are included in all error messages, not just the one printed
  479.             to stderr.
  480.         + symbol_function(): can't make closures from protected lfuns of
  481.             other objects anymore.
  482.         + trace(), traceprefix() are validated with the master-lfun
  483.             valid_trace().
  484.  
  485.     - Corrected efuns:
  486.         + caller_stack(): is now declared to return 'object *' as it
  487.             indeed does.
  488.         + query_mud_port(): now accepts 'int' arguments as documented.
  489.         + restore_object(): protected against negative '([:<width>])'
  490.             specifications.
  491.         + (s)printf(): prints variable closures properly even if the
  492.             variable vanished in a program replacement.
  493.         + symbol_variable(): recognizes objects with pending program
  494.             replacements.
  495.         + terminal_colour(): when wrapping is active, keywords were
  496.             replaced even when no '%^' was present. Not any more.
  497.         + to_object(): returns 0 for closures bound to a destructed
  498.             object.
  499.         + to_string(): converts variable closures properly even if the
  500.             variable vanished in a program replacement.
  501.         + to_string(): in compat mode, object names are no longer prepended
  502.             with a slash.
  503.         + unmkmapping(): now handles key-only mappings as it should.
  504.  
  505.     - New efuns:
  506.         + atan2(): alternative way to calculate the inverse tangens.
  507.         + ceil(): rounds a float up to the nearest whole number.
  508.         + floor(): rounds a float down to the nearest whole number.
  509.         + pow(): raises a float to the power of another float.
  510.  
  511.         + and_bits(): binary-ands two bitstrings.
  512.         + or_bits(): binary-ors two bitstrings.
  513.         + xor_bits(): binary-xors two bitstrings.
  514.         + invert_bits(): negates a bitstring.
  515.         + next_bit(): finds the next set (cleared) bit in a bitstring.
  516.         + last_bit(): returns the last set bit in a bitstring.
  517.         + count_bits(): count the number of bits in a bitstring.
  518.  
  519.         + (preliminary) command_stack(): returns the current command stack.
  520.         + command_stack_depth(): returns the depth of the command stack.
  521.         + (preliminary) execute_command(): low-level access to the
  522.             command parser.
  523.         + query_command(): returns the full command seen by the parser.
  524.         + query_notify_fail(): returns the current notify-fail setting.
  525.  
  526.         + object_time(): return the time an object was created.
  527.         + (preliminary) present_clone(): find objects with a specific
  528.             blueprint in a given environment.
  529.         + trim(): trim a certain character from a string.
  530.  
  531.         + (preliminary) limited(): executes a closure with changed runtime
  532.           limits
  533.         + query_limits(): queries the current/default runtime limits
  534.         + (preliminary) set_limits(): sets new default runtime limits.
  535.  
  536.     - Master Object:
  537.         + valid_write(): New call_funs 'objdump' and 'opcdump', passed
  538.             when attempting to dump the object and opcode information
  539.             into a file. This applies to the special commands 'dumpallobj'
  540.             and 'opcdump' as well as for the debug_info() uses.
  541.         + query_player_level(): obsolete and gone.
  542.         + valid_trace(): New lfun to validate uses of trace() and
  543.             traceprefix() (query_player_level() did this before).
  544.  
  545.     - Fixed Crashers:
  546.         + A heart_beat() removing all remaining objects on the hb list.
  547.         + An error during a (s)efun bound to a swapped out object could
  548.           crash the dump_trace.
  549.         + An error during macro expansion crashed the driver if the error
  550.           handling itself required macro expansion again.
  551.         + to_string() on a lfun of a swapped program.
  552.         + call_lambda() on not-inherited variable closures.
  553.         + replace_program() on a program of which one variable is referenced
  554.           by a symbol_variable().
  555.         + Swap in of a closure variable which was invalidated during
  556.           a garbage collection.
  557.         + Failure to swap in an object during a garbage collection.
  558.         + Binding an unbound lambda to two objects and destructing
  559.           the originating object freed the lambda.
  560.  
  561.     - Language:
  562.         + '+=' now allows to add an int onto a float (before only floats
  563.             were allowed). Similar for '-=', '*=' and '/='.
  564.         + '*'/'*=' may multiply strings or arrays with positive numbers. The
  565.             result is the string/array <number>times repeated.
  566.         + Scope of variables defined in nested local blocks ends with the
  567.             defining local block. The limit MAX_LOCAL applies only to the
  568.             variables which are in scope at the same time. Variables in
  569.             inner scopes can hide variables in outer scopes. Unchanged is that
  570.             local variables are initialised to 0 when their scope is
  571.             (re)entered.
  572.         + The pragmas 'no_local_scopes' and 'local_scopes' turn the local
  573.             scoping of variables off resp. back on.
  574.         + in 'for(<init>, <init>, ..., <init>; ...)' each <init> can either
  575.             be a normal expression, or a definition of a local variable
  576.             with assignment, e.g. 'int i = <expr>'. The scope of such
  577.             variables is the whole for() statement.
  578.         + added inline closures as alternative to lfun closures: instead
  579.             of
  580.                 int foo(int arg ) { return arg * 2; }
  581.                 map_array(arr, #'foo);
  582.             you can write
  583.                 map_array(arr, (: return $1 * 2; :) );
  584.             or just
  585.                 map_array(arr, (: $1 * 2 :) );
  586.             The syntax is modelled after MudOS functionals.
  587.         + Support for alien-lfun closures was incomplete.
  588.         + New pragma 'no_clone': disallows clones of a program.
  589.         + New pragma 'no_inherit': disallows inheriting a program.
  590.         + Bugfix: Variables in closures may start with '_'.
  591.         + Bugfix: *::f() did not call all inherited functions (and others
  592.             multiple times).
  593.         + Bugfix: '#[<] indexing corrected.
  594.  
  595.     - Runtime:
  596.         + If hook H_RESET is a closure, and the closure returns a negative
  597.             value, the object will not be reset again, as
  598.             if set_next_reset(-1) had been used.
  599.         + New optional driver hook H_COMMAND allows to replace the driver
  600.             command parsing with your own. When used, the H_MODIFY_COMMAND
  601.             and H_NOTIFY_FAIL hooks are ignored.
  602.         + The H_MODIFY_COMMAND hooks may now change the commandgiver. The
  603.             change remains active during the execution of the command, and
  604.             the original commandgiver is passed to the NOTIFY_FAIL hook.
  605.         + Mappings have an upper limit of MAX_MAPPING_SIZE keys (default
  606.             is 5000).
  607.         + Special commands 'dumpallobj' and 'opcdump' are verified through
  608.             master->valid_write().
  609.         + Driver can be compiled for DYNAMIC_COSTS, causing increased
  610.             eval-costs for computationally expensive operations. For
  611.             now, this applies only to string additions with an additional
  612.             cost of strlen(result)/1000 .
  613.  
  614.     - Other Changes:
  615.         + Tweaks to the timing of swapping, cleanup() and reset() to
  616.             achieve a smoother operation.
  617.         + On loading errors, the name of the affected object is printed
  618.             in the error message.
  619.         + The multiport feature is no longer optional.
  620.         + Corrections to the manpages of clone_object, clonep, filter_mapping,
  621.             filter_indices.
  622.         + Added the include files mudlib/sys/{trace.h,input_to.h,files.h,
  623.             debug_info.h} with definitions for the efuns trace(), input_to(),
  624.             file_size(), get_dir(), and debug_info().
  625.         + NATIVE_MODE is gone.
  626.         + Euids are now a standard feature (the LPC macro __EUIDS__ stays
  627.             defined, though).
  628.         + Use of euids (loading or cloning other objects requires a non-zero
  629.             euid) can be enforced with the commandline option
  630.             '--strict-euids'. If defined, the LPC macro '__STRICT_EUIDS__'
  631.             is defined.
  632.             If your mud ran in NATIVE_MODE, this is the option you'll want
  633.             to use.
  634.         + The commandline options '--reset-time' and '--cleanup-time' specify
  635.             the cleanup and reset times. The old config.h symbols
  636.             TIME_TO_RESET and TIME_TO_CLEAN_UP just give the default values.
  637.         + The commandline options '--max-array' and '--max-mapping' can set
  638.             the max limits for arrays and mappings. For both, a setting of 0
  639.             disables the limit checks.
  640.         + The commandline options '--max-bytes' and '--max-file' can set
  641.             the max IO limits for file reads and writes.
  642.         + Efun closures are printed with full name in error tracebacks.
  643.         + The ACCESS.ALLOW file can specify portnumbers.
  644.         + Special command 'status malloc' is now identical to 'malloc'.
  645.         + Special commands 'debugmalloc' and 'showsmallnewmalloced' are
  646.             deactivated.
  647.         + Bugfix: Reset of swapped objects did not work properly.
  648.         + Bugfix: Errors during the execution of closures no longer leak
  649.             memory.
  650.         + Bugfix: Switching driver hooks from within themselves no longer
  651.             leaks memory.
  652.         + Bugfix: New callouts added from within a callout with odd delay
  653.             resulted in the new callouts called at the wrong time. If the
  654.             new callout had a MAX_INT delay, the existing callout list
  655.             was effectively disabled.
  656.  
  657.  
  658. 01-Apr-1999 (Lars Duening) -- Release 3.2.6
  659.     - Changed efuns:
  660.         + allocate_mapping() renamed to m_allocate(). The old name
  661.             is still available as alias.
  662.         + clone_object() accepts objects as templates.
  663.         + efun308() renamed to set_environment(). The old name is
  664.             still available as alias.
  665.         + file_name() renamed to object_name(). The old name is still
  666.             available as alias.
  667.         + filter_mapping() renamed to filter_indices(). The old name
  668.             is still available as alias.
  669.         + mapping_contains() renamed to m_contains(). The old name is
  670.             still available as alias.
  671.         + map_mapping() renamed to map_indices(). The old name
  672.             is still available as alias.
  673.         + mapping_contains() renamed to m_contains(). The old name is
  674.         + m_values() can return any column of a mapping.
  675.         + notify_fail() returns 0.
  676.         + set_this_player() accepts 0 as argument.
  677.         + to_int(), to_object() and to_float() accept their result
  678.             type as argument.
  679.  
  680.     - Corrected efuns:
  681.         + call_out(): if the command_giver destructs before the callout
  682.             is activated, this_player() is made sure to be 0.
  683.         + map_array() stumbled when objects in the array in question
  684.             were destructed during the operation.
  685.         + sizeof(mapping) no longer counts destructed objects in
  686.             the mapping to the size.
  687.         + sprintf() of float values < 1.0 no longer causes a SING error.
  688.         + terminal_colour() correctly wraps strings with a length one less
  689.             than the wrap limit.
  690.         + this_interactive(): during login it points to the login object.
  691.  
  692.     - New efuns:
  693.         + abs(): return the absolute value of the argument.
  694.         + all_environment(): return all environments of an object.
  695.         + caller_stack(): return the call stack.
  696.         + clonep(): test if an object is a clone.
  697.         + copy(): produce a shallow copy of the argument.
  698.         + deep_copy(): produce a shallow copy of the argument.
  699.         + filter(): filter an array or fill-width mapping.
  700.         + load_name(): returns the filename of an objects blueprint.
  701.         + load_object(): loads an object.
  702.         + make_shared_string(): enters a string into the shared string table.
  703.         + map(): map an array or full-width mapping.
  704.         + m_reallocate(): changes the width of a mapping.
  705.         + object_info(): returns internal information about an object.
  706.         + program_name(): returns the name of an objects program.
  707.         + set_next_reset(): set the time of the next reset.
  708.         + unmkmapping(): deconstruct a mapping to arrays.
  709.         + upper_case(): make a string all upper case.
  710.         + widthof(): return the width of a mapping.
  711.  
  712.     - Master Object:
  713.         + All functions can be static.
  714.         + Functions like privilege_violation() or heart_beat_error(), but
  715.             also valid_read() and valid_write() no longer receive destructed
  716.             objects as arguments.
  717.         + Apply 'object_name()' renamed to 'printf_obj_name()'.
  718.  
  719.     - Compiler:
  720.         + New predefined macro __MAX_EVAL_COST__ expands to the evaluation
  721.             cost limit.
  722.         + Bugfix: __DOMAIN_NAME__ on some machines returned the NIS, not the
  723.             DNS domain.
  724.         + Bugfix: __MASTER_OBJECT__ could be set to a non-canonic name.
  725.         + Bugfix: __FILE__ and __MASTER_OBJECT__ returned names with leading
  726.             '/' in compat mode.
  727.         + Bugfix: (virtual) inheritance of variable-only objects with
  728.             variable initialisation doesn't crash the driver anymore.
  729.         + Bugfix: #'++/#'-- in closures work.
  730.  
  731.     - Fixed Crashers:
  732.         + Errors in a callout to an efun closure.
  733.         + Adding arrays up to and over the upper limit.
  734.         + Destruction of non-interactive snoopers.
  735.         + funcall()/apply() on a swapped variable.
  736.  
  737.     - Other Changes:
  738.         + The old behaviour of explode() and previous_object() is no longer
  739.             available. Floats, transcendent functions, mappings and extended
  740.             varargs are now permanent features of the driver.
  741.         + Re-implemented the handling of heartbeats, resets, cleanups and
  742.             swapping in order to avoid caused lags. This also makes
  743.             the config parameter RESET_GRANULARITY unnecessary.
  744.         + If used, the __INIT() function is protected instead of global, and
  745.             can't be called from outside the objects anymore (it shouldn't be
  746.             callable at all anyway).
  747.         + When subtracting mappings from each other, the subtrahend may
  748.             be of any width, but only its keys count.
  749.         + The 'status tables' command has an additional entry 'Object status'.
  750.         + Bugfix: fixed an eval cost leak in catch().
  751.         + Bugfix: fixed memory leak in terminal_colour().
  752.         + Bugfix: if a command disconnects, but not quits a player, the prompt
  753.             is no longer printed (before it ended up on stdout, cluttering
  754.             the logfiles).
  755.  
  756.  
  757. 10-Dec-1998 (Lars Duening) -- Release 3.2.5
  758.     - Collapsing of '/' in object names also used for inherits.
  759.     - Default limit for bitstrings is 6144 bits.
  760.     - The efuns break_point() and swap() are disabled by default.
  761.     - Pre-release versions have an extended version number of
  762.         the form '3.2.5-dev.16'.
  763.     - Compat mode drivers define __COMPAT_MODE__ (meant to replace
  764.         COMPAT_FLAG eventually); native mode drivers define
  765.         __NATIVE_MODE__.
  766.         Similar, a driver using euids defines __EUIDS__.
  767.     - New defines __ERQ_MAX_SEND__ and __ERQ_MAX_REPLY__ when the
  768.         driver supports the ERQ. The values are the max sizes of
  769.         the send and receive buffers.
  770.     - MSDOS support removed (the MSDOS filesystem however is still
  771.         supported).
  772.     - It is now possible to use '..' in filenames as long as it
  773.         doesn't has the 'parent directory' meaning (that means, 'foo..bar'
  774.         is ok, bug 'foo/../bar' is not).
  775.     - When a connection is closed, the driver no longer sends
  776.         'Closing down' as last text.
  777.     - Bugfix: branches in bigger lambda() closures use the correct
  778.         branch offsets. I am not completely sure if the bugfix is
  779.         correct, so I left in two 'DEBUG:' diagnostics with information
  780.         needed to debug the code further if necessary.
  781.     - Bugfix: the commandline parser printed a faulty error message
  782.         if a required value was missing.
  783.     - Bugfix: mapping_contains() freed the wrong values, clobbering
  784.         passed mapping literals.
  785.     - Bugfix: After an UDP packet was processed, the evaluation costs
  786.         are restored.
  787.     - Bugfix: The LPC compiler now accepts only regular files for includes.
  788.     - Bugfix: If a npc was destructed between to command() calls, and
  789.         the H_MODIFY_COMMAND hook was set to a string, the driver called
  790.         the named modify-command function on the destructed npc.
  791.     - Bugfix: During the execution of a closure, an extra refcount is
  792.         added to protect it from destruction while it is executed. This
  793.         is primarily a safety measure for the driver hooks which only
  794.         have 1 refcount and are thus very sensitive against master object
  795.         updates.
  796.     - Bugfix: Under some OS like Linux, the normal SIG_IGN handler is
  797.         just one-shot. To reliably ignore signals (ie SIGPIPE), a homemade
  798.         handler is used.
  799.     - Bugfix: regreplace("acc", "a*", "yy",1) trashed memory.
  800.     - Bugfix: runtime errors in an alien-lfun-closure (as created by
  801.         symbol_function() calls) no longer crash the driver during the
  802.         error handling.
  803.     - Bugfix: sprintf() on big floats or in long fields no longer causes
  804.         a buffer overrun (and should it happen nevertheless, a proper
  805.         fatal() is generated).
  806.  
  807.  
  808. 24-Sep-1998 (Lars Duening) -- Release 3.2.4
  809.     - Bugfix for the collapsing of '/' in object names.
  810.  
  811. 21-Sep-1998 (Lars Duening) -- Release 3.2.3
  812.     - Bugfix: mapping_contains() no longer returns destructed objects.
  813.     - New special command 'status files' to append file usage statistics
  814.         from within the mud to the file /FILESTAT.
  815.     - New commandline option:
  816.         --swap-compact: reuse free space in the swapfile immediately.
  817.       Giving this option results in smaller, but also more fragmented
  818.       swapfiles, and the swap performance may degrade.
  819.  
  820. 14-Sep-1998 (Lars Duening) -- Release 3.2.2
  821.     - Version number pattern changed from 03.02.1@<patchlevel>
  822.       to 3.2.<patchlevel>. This affects all uses of the __VERSION__
  823.       lpc predefine.
  824.     - Objects may be loaded/inherited with filenames containing two or
  825.       more consecutive '/'es, these are collapsed into just one.
  826.       However, it is not possible to find objects using the wrong
  827.       names.
  828.     - The dreaded __INIT() bug is fixed.
  829.     - New commandline options:
  830.         --options : prints all options used in compiling the driver
  831.         --version : prints the game driver version
  832.         --help    : prints a short help of the commandline options
  833.         --longhelp: prints an elaborate description of the commandline
  834.                     options
  835.     - The commandline option handling was renovated, most options now
  836.       exist in a short and long form. This caused slight changes in
  837.       name and syntax for well-known options (.e.g '--gcollect_out_fd<file>'
  838.       is now '--gcollect-out-fd <file>'). Please see doc/driver/invocation
  839.       for further information.
  840.  
  841. 10-Jul-1998 (Lars Duening) -- Release 3.2.1@141-osb.16
  842.     - Bugfix for the "*":: problem.
  843.     - Added a minimal master for simple driver tests.
  844.  
  845. 17-May-1998 (Lars Duening) -- Release 3.2.1@141-osb.14 and before
  846.     - Small speedup for regexps through usage of a cache. Also increased
  847.       the complexity limit for regexps.
  848.     - Added support for BeOS.
  849.     - Automatic garbage collections are kept at least 5 minutes
  850.       apart. Every garbage collection is logged on stdout.
  851.     - Variables are swapped independantly from program code.
  852.     - Multiple login ports may be used in parallel. The
  853.       port numbers are given on the commandline, efun query_mud_port()
  854.       was extended to return the appropriate port number.
  855.     - MudOS-efun terminal_colour() added by Mica.
  856.     - this_object() in destructed objects does not print a
  857.       diagnostic anymore.
  858.     - 'status tables' prints the number of cache hits both
  859.       absolute and as percentage.
  860.